import axios from "axios";
import Cookies from "js-cookie";
import router from "../router/index.js"
import Base64 from "../util/Base64.js"

// const instance = axios.create({
// 	baseURL: 'http://192.168.1.54:8081/m.api',
// 	timeout: 1000,
// });

// // 给实例添加一个setToken方法，用于登录后将最新token动态添加到header，同时将token保存在Cookies中
// async function setToken(token, response) {
// 	instance.defaults.headers['ADMINTOKEN'] = token
// 	var millisecond = new Date().getTime();
// 	var expiresTime = new Date(millisecond + 60 * 1000 * 30);
// 	// 保存到本地存储
// 	sessionStorage.setItem("token", token);
// 	Cookies.set('token', token, {
// 		expires: expiresTime
// 	});
// 	//重新设置请求头
// 	let config = response.config;
// 	config.headers["ADMINTOKEN"] = token;
// }

// // 添加请求拦截器----给请求头添加token
// instance.interceptors.request.use(function(config) {
// 	// 在发送请求之前做些什么
// 	// 给请求头添加token
// 	config.headers["ADMINTOKEN"] = Cookies.get("token");
// 	// console.log(config)
// 	return config;
// }, function(error) {
// 	// 对请求错误做些什么
// 	return Promise.reject(error);
// });

// // 添加响应拦截器   ----刷新令牌（无限刷新，无痛刷新）--token
// instance.interceptors.response.use(function(response) {
// 	// 对响应数据做点什么
// 	console.log(response.data)
// 	if (response.data.errno === 10001 || response.data.errno === 10006) {
// 		// 获取用户名和密码
// 		let username = Cookies.get("username") ? Base64.decode(Cookies.get("username")) : undefined
// 		let password = Cookies.get("password") ? Base64.decode(Cookies.get("password")) : undefined
// 		console.log(username,password);
// 		if (username && password) {// 是否记住密码
// 			// 重新获取token
// 			_this.axios.get("http://192.168.1.54:8081/m.api", {
// 				params: {
// 					_gp: "admin",
// 					_mt: "login",
// 					username: username,
// 					password: password,
// 					verifyCode: "666666"
// 				}
// 			}).then((res) => {
// 				console.log(res)
// 				let token = res.data.data
// 			})
// 			// 传值token
// 			return setToken(token, response)
// 		} else { //否则返回登录
// 			router.replace({
// 				path: '/login',
// 				query: {
// 					order: 'login'
// 				}
// 			});
// 		}
// 	}
// 	return response
// }, function(error) {
// 	// 对响应错误做点什么
// 	return Promise.reject(error);
// });
import {
	login
} from "./api.js"

// 创建一个axios实例
const instance = axios.create({
	baseURL: 'http://192.168.1.54:8081/m.api',
	timeout: 3000
})

// 添加请求拦截器----给请求头添加token
instance.interceptors.request.use(
	config => {
		config.headers["ADMINTOKEN"] = Cookies.get("token");
		return config;
	},
	error => {
		console.log(error);
		// 如果发生错误的话调用reject
		Promise.reject(error);
	}
);

// 获取token
async function refreshToken() {
	let username = Cookies.get("username") ? Base64.decode(Cookies.get("username")) : undefined
	let password = Cookies.get("password") ? Base64.decode(Cookies.get("password")) : undefined
	// console.log(username, password);
	let ruleForm = {
		'username': username,
		'password': password,
		'verifyCode': 666666
	}
	if (username && password) { // 是否记住密码
		return login(ruleForm)//调用封装api返回res
	} else {//否则返回登录
		router.replace({
			path: "/login",
			query: {
				order: 'login'
			}
		});
	}
}
// 添加响应拦截器   ----刷新令牌（无限刷新，无痛刷新）--token
instance.interceptors.response.use(
	response => {
		// console.log(response.data.errno)
		if (response.data.errno === 10001 || response.data.errno === 10006) {//当token过期
			let config = response.config;
			return setToken(config);
		}
		return response
	}, error => {
		return Promise.reject(error)
	})


// 给实例添加一个setToken方法，用于登录后将最新token动态添加到header，同时将token保存在Cookies中
async function setToken(config) {
	let res = await refreshToken()//获取token
	var millisecond = new Date().getTime();
	var expiresTime = new Date(millisecond + 60 * 1000 * 30);
	// 保存到本地存储
	let token = res.data.data
	// console.log(token)
	sessionStorage.setItem("token", token);
	Cookies.set('token', token, {
		expires: expiresTime
	});
	//重新设置请求头
	config.headers["ADMINTOKEN"] = token;
	const request = await axios.request(config);//重新发送请求
	return request;
}

export default instance;
